// VideoStreamHandler.hh
// 视频流处理类头文件

#ifndef VIDEO_STREAM_HANDLER_HH
#define VIDEO_STREAM_HANDLER_HH

#include "service/IMediaStreamHandler.hh"
#include <pthread.h>
#include <stdint.h>

// 视频编码类型枚举
enum VideoCodecType {
    VIDEO_CODEC_H264 = 0,
    VIDEO_CODEC_H265 = 1,
    VIDEO_CODEC_MPEG4 = 2,
    VIDEO_CODEC_OTHER = 3
};

// 视频配置结构体
struct VideoConfig {
    VideoCodecType codecType;  // 编码类型
    int width;                 // 视频宽度
    int height;                // 视频高度
    int frameRate;             // 帧率
    int bitrate;               // 比特率
    int gopSize;               // GOP大小
    int bufferSize;            // 缓冲区大小（字节）
};

// 已移除未使用的帧信息/统计/回调定义

// 视频流处理类（精简为当前项目实际使用的接口）
// 实现IMediaStreamHandler接口
class VideoStreamHandler : public IMediaStreamHandler {
public:
    // 工厂方法创建新实例
    static VideoStreamHandler* createNew(void* env,
                                        const struct VideoConfig& config);

    // 析构函数
    virtual ~VideoStreamHandler();
    
    // 实现IMediaStreamHandler接口
    virtual bool initialize() override;
    virtual void updateParameterSets(const unsigned char* sps, size_t spsSize,
                                     const unsigned char* pps, size_t ppsSize) override;
    virtual void notifyNewFrameAvailable() override;
    virtual const unsigned char* getSPS() const override { return fSPS; }
    virtual size_t getSPSSize() const override { return fSPSSize; }
    virtual const unsigned char* getPPS() const override { return fPPS; }
    virtual size_t getPPSSize() const override { return fPPSSize; }

private:
    // 构造函数（私有，使用工厂方法）
    VideoStreamHandler(void* env,
                      const struct VideoConfig& config);

    // 初始化/释放环形缓冲区
    bool initRingBuffer();
    void freeRingBuffer();

    // 成员变量（仅保留必要的）
    void* fEnviron;                       // 环境（简化为void*）
    struct VideoConfig fConfig;           // 视频配置
    pthread_mutex_t fMutex;               // 互斥锁
    pthread_cond_t fCond;                 // 条件变量
    bool fIsInitialized;                  // 是否初始化
    bool fRingAllocated;                  // 是否已分配环形缓冲区

    // 参数集
    unsigned char* fSPS;                  // SPS数据
    size_t fSPSSize;                      // SPS大小
    unsigned char* fPPS;                  // PPS数据
    size_t fPPSSize;                      // PPS大小
    bool fParameterSetsUpdated;           // 参数集是否已更新
};

#endif // VIDEO_STREAM_HANDLER_HH